package gjbsh.bangong.ds.service;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import gjbsh.bangong.ds.dao.单位附加信息Mapper;
import gjbsh.bangong.ds.model.单位附加信息;
import gjbsh.bangong.utils.CreateXLS;


/**
 * @author yaolongjun
 * @date   2020年5月15日 上午8:28:06
 */
@Service
public class 单位附加信息Service {

	@Autowired
	单位附加信息Mapper ddMapper;

	@Value("${userfilepath}")
	private String userfilepath;

	// 查询当前单位的所属详细部门信息
	public Map<String, Object> findCustomByDeptId(String ppDeptId) {
		return ddMapper.findCustomByDeptId(ppDeptId);
	}

	// 查询
	public 单位附加信息 findOne(String ppDeptId) {
		return ddMapper.selectByPrimaryKey(ppDeptId);
	}

	// 新增
	public boolean add(单位附加信息 mmDeptFujiaxinxi) {
		return ddMapper.insert(mmDeptFujiaxinxi) == 1;
	}

	// 修改
	public boolean modify(单位附加信息 mmDeptFujiaxinxi) {
		return ddMapper.updateByPrimaryKey(mmDeptFujiaxinxi) == 1;
	}

	// 删除
	public boolean delete(String ppDeptId) {
		return ddMapper.deleteByPrimaryKey(ppDeptId) == 1;
	}

	// 更新单位所属详细部门
	public boolean updateDeptSuoshubumen(String ppDeptId, String ppDeptSsxxbumenId) {
		单位附加信息 mmDeptFujiaxinxi = findOne(ppDeptId);
		boolean addflag = false;
		if(mmDeptFujiaxinxi == null) {
			addflag = true;
			mmDeptFujiaxinxi = new 单位附加信息();
			mmDeptFujiaxinxi.set单位id(ppDeptId);
			mmDeptFujiaxinxi.set状态(BigDecimal.ZERO);
		}
		mmDeptFujiaxinxi.set单位所属详细部门id(ppDeptSsxxbumenId);

		if(addflag) {
			if(!add(mmDeptFujiaxinxi)) {
				throw new RuntimeException("新增单位附加信息失败");
			}
		}else {
			if(!modify(mmDeptFujiaxinxi)) {
				throw new RuntimeException("修改单位附加信息失败");
			}
		}
		return true;
	}

	public Map<String, Object> findByDeptId(String ppDeptId) {
		// TODO Auto-generated method stub
		return ddMapper.findByDeptId(ppDeptId);
	}

	@Transactional
	public Boolean deleteAndAdd(String ppDeptId, 单位附加信息 mm单位附加信息) {

		// 先删除
		if(!delete(ppDeptId)){
			throw new RuntimeException("清除数据失败！");
		}

		if(!add(mm单位附加信息)){
			throw new RuntimeException("保存数据失败！");
		}

		return true;
	}

	// 根据单位id查找本单位及所有下级单位列表
	public List<Map<String,Object>> findDeptListByConditionPaging(String ppDeptId,String ppShengfenId,
			String ppDanweimingcheng, String ppDanweileixing, String ppShezhannianfen, int ppPageIndex, int ppPageSize) {

		// 起始、终止页码
		int mmStartIndex = (ppPageIndex - 1) * ppPageSize + 1;
		int mmEndIndex = ppPageIndex * ppPageSize;

		List<Map<String,Object>> mmDeptList = ddMapper.findDeptListByConditionPaging(ppDeptId,ppShengfenId,ppDanweimingcheng,ppDanweileixing,ppShezhannianfen,mmStartIndex,mmEndIndex);

		return mmDeptList;
	}

	public int CountDeptByCondition(String ppDeptId, String ppShengfenId, String ppDanweimingcheng,
			String ppDanweileixing, String ppShezhannianfen) {
		// TODO Auto-generated method stub
		Object mmCount = ddMapper.CountDeptByCondition(ppDeptId,ppShengfenId,ppDanweimingcheng,ppDanweileixing,ppShezhannianfen);
		return mmCount == null ? 0 : Integer.parseInt(mmCount.toString());
	}

	public List<Map<String, Object>> findDeptListByCondition(String ppDeptId, String ppShengfenId,
			String ppDanweimingcheng, String ppDanweileixing, String ppShezhannianfen) {
		// TODO Auto-generated method stub

		List<Map<String,Object>> mmDeptList = ddMapper.findDeptListByCondition(ppDeptId,ppShengfenId,ppDanweimingcheng,ppDanweileixing,ppShezhannianfen);

		return mmDeptList;
	}

	public void daochuchaxunjieguo(List<Map<String, Object>> mmDeptList, HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		try {
			List<List<String>> mmResultList = new ArrayList<List<String>>();;

			List<String> mmTitleList = new ArrayList<String>();

			// 表头
			mmTitleList.add("单位类型");
			mmTitleList.add("单位名称");
			mmTitleList.add("单位英文名称");
			mmTitleList.add("省份");
			mmTitleList.add("城市");

			mmTitleList.add("通讯地址");
			mmTitleList.add("单位所属详细部门名称");
			mmTitleList.add("博士后工作所在部门");
			mmTitleList.add("管理人员姓名");
			mmTitleList.add("邮编");

			mmTitleList.add("电子邮件");
			mmTitleList.add("手机号码");
			mmTitleList.add("电话");
			mmTitleList.add("传真");
			mmTitleList.add("收款单位名称");

			mmTitleList.add("开户行行别");
			mmTitleList.add("开户行名称");
			mmTitleList.add("银行账号");
			mmTitleList.add("大额行号");

			mmResultList.add(mmTitleList);

			// 循环获取excel中的内容
			for (int i = 0; i < mmDeptList.size(); i++) {
				List<String> tempList = new ArrayList<String>();

				Map<String, Object> mmTempDept= mmDeptList.get(i);

				String mm单位类型 = mmTempDept.get("单位类型名称") == null ? "" : mmTempDept.get("单位类型名称").toString();
				String mm单位名称 = mmTempDept.get("单位名称") == null ? "" : mmTempDept.get("单位名称").toString();
				String mm单位英文名称 = mmTempDept.get("单位名称_英文") == null ? "" : mmTempDept.get("单位名称_英文").toString();
				String mm省份 = mmTempDept.get("省份名称") == null ? "" : mmTempDept.get("省份名称").toString();
				String mm城市 = mmTempDept.get("地区名称") == null ? "" : mmTempDept.get("地区名称").toString();

				String mm通讯地址 = mmTempDept.get("通讯地址") == null ? "" : mmTempDept.get("通讯地址").toString();
				String mm单位所属详细部门名称 = mmTempDept.get("单位所属详细部门名称") == null ? "" : mmTempDept.get("单位所属详细部门名称").toString();
				String mm博士后工作所在部门 = mmTempDept.get("博士后工作所在部门") == null ? "" : mmTempDept.get("博士后工作所在部门").toString();
				String mm管理人员姓名 = mmTempDept.get("管理人员姓名") == null ? "" : mmTempDept.get("管理人员姓名").toString();
				String mm邮编 = mmTempDept.get("邮编") == null ? "" : mmTempDept.get("邮编").toString();

				String mm电子邮件 = mmTempDept.get("电子邮件") == null ? "" : mmTempDept.get("电子邮件").toString();
				String mm手机号码 = mmTempDept.get("手机号码") == null ? "" : mmTempDept.get("手机号码").toString();
				String mm电话 = mmTempDept.get("完整电话") == null ? "" : mmTempDept.get("完整电话").toString();
				String mm传真 = mmTempDept.get("完整传真") == null ? "" : mmTempDept.get("完整传真").toString();
				String mm收款单位名称 = mmTempDept.get("收款单位名称") == null ? "" : mmTempDept.get("收款单位名称").toString();

				String mm开户行行别 = mmTempDept.get("开户行行别名称") == null ? "" : mmTempDept.get("开户行行别名称").toString();
				String mm开户行名称 = mmTempDept.get("开户行名称") == null ? "" : mmTempDept.get("开户行名称").toString();
				String mm银行账号 = mmTempDept.get("银行账号") == null ? "" : mmTempDept.get("银行账号").toString();
				String mm大额行号 = mmTempDept.get("大额行号") == null ? "" : mmTempDept.get("大额行号").toString();

				// 存值
				tempList.add(mm单位类型);
				tempList.add(mm单位名称);
				tempList.add(mm单位英文名称);
				tempList.add(mm省份);
				tempList.add(mm城市);

				tempList.add(mm通讯地址);
				tempList.add(mm单位所属详细部门名称);
				tempList.add(mm博士后工作所在部门);
				tempList.add(mm管理人员姓名);
				tempList.add(mm邮编);

				tempList.add(mm电子邮件);
				tempList.add(mm手机号码);
				tempList.add(mm电话);
				tempList.add(mm传真);
				tempList.add(mm收款单位名称);

				tempList.add(mm开户行行别);
				tempList.add(mm开户行名称);
				tempList.add(mm银行账号);
				tempList.add(mm大额行号);

				mmResultList.add(tempList);
			}

			// 获得当前日期
			Date mmDate = new Date();
			DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
			String mmDateString = f.format(mmDate);

			String userfilelujin = userfilepath;

			// 取出文档存放的根目录，并去除文件最后的斜杠
			if (userfilelujin.endsWith("/")) {
				userfilelujin = userfilelujin.substring(0, userfilelujin.length() - 1);
			}

			// 生成路径
			userfilelujin += "/temp/danweixinxi/" + mmDateString + "/danweitongxunxinxi/";
			CreateXLS.createExcel(mmResultList, userfilelujin, "danweitongxunxinxi_" + mmDateString + ".xls", "danweitongxunxinxi",
					request, response);

		}catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 开启更新——更改状态
	public Integer modifyAllZhuangtai(BigDecimal ppZhuangtai) {
		return ddMapper.modifyAllZhuangtai(ppZhuangtai) ;
	}

	// 根据上传的excel导出匹配后的excel
	public void exportDanweixinxi(List<Map<String, Object>> ppExcelList, 
			HttpServletRequest request, HttpServletResponse response) {
		try {

			List<List<String>> mmResultList = new ArrayList<List<String>>();;

			List<String> mmTitleList = new ArrayList<String>();

			// 表头
			mmTitleList.add("序号");
			mmTitleList.add("单位名称");
			mmTitleList.add("状态");	
			mmTitleList.add("单位英文名称");
			mmTitleList.add("省份");
			mmTitleList.add("城市");

			mmTitleList.add("通讯地址");
			mmTitleList.add("单位所属详细部门名称");
			mmTitleList.add("博士后工作所在部门");
			mmTitleList.add("管理人员姓名");
			mmTitleList.add("邮编");

			mmTitleList.add("电子邮件");
			mmTitleList.add("手机号码");
			mmTitleList.add("电话");
			mmTitleList.add("传真");
			mmTitleList.add("收款单位名称");

			mmTitleList.add("开户行行别");
			mmTitleList.add("开户行名称");
			mmTitleList.add("银行账号");
			mmTitleList.add("大额行号");

			mmResultList.add(mmTitleList);

			// 查找所有的单位列表
			List<Map<String,Object>> mmDeptList = ddMapper.findAllDeptList();

			// 循环excellist
			for(int i = 0 ; i < ppExcelList.size() ; i ++) {
				List<String> tempList = new ArrayList<String>();

				Map<String,Object> mmExcelTempMap = ppExcelList.get(i);
				String mmExcelDeptName = mmExcelTempMap.get("单位名称") == null ? "" : mmExcelTempMap.get("单位名称").toString();
				String mmXuhao = String.valueOf(i+1);
				String mmZhuangtai = "未匹配成功";				
				String mm单位英文名称 = "";
				String mm省份 = "";
				String mm城市 = "";

				String mm通讯地址 = "";
				String mm单位所属详细部门名称 = "";
				String mm博士后工作所在部门 = "";
				String mm管理人员姓名 = "";
				String mm邮编 = "";

				String mm电子邮件 =  "" ;
				String mm手机号码 = "";
				String mm电话 = "";
				String mm传真 = "";
				String mm收款单位名称 = "";

				String mm开户行行别 = "";
				String mm开户行名称 = "";
				String mm银行账号 = "";
				String mm大额行号 = "";


				for(int j = 0 ; j < mmDeptList.size() ; j ++) {
					Map<String,Object> mmTempDept = mmDeptList.get(j);
					String mm单位名称 = mmTempDept.get("单位名称") == null ? "" : mmTempDept.get("单位名称").toString();

					// 因为单位名称是从单位表中取的，只要excel不填错，就能匹配到
					if(mmExcelDeptName.equals(mm单位名称)) {

						// 查单位_附加信息中是否存在此单位对应的单位id，若不为null，证明这个单位已填过“单位_附加信息”
						String mm附加信息中是否存在此单位 = mmTempDept.get("附加信息中是否存在此单位") == null ? "" : mmTempDept.get("附加信息中是否存在此单位").toString();
						if(!mm附加信息中是否存在此单位.equals("")) {
							mmZhuangtai = "匹配成功";

							// mmZhuangtai = mmTempDept.get("状态") == null ? "" : mmTempDept.get("状态").toString();						
							mm单位英文名称 = mmTempDept.get("单位名称_英文") == null ? "" : mmTempDept.get("单位名称_英文").toString();
							mm省份 = mmTempDept.get("省份名称") == null ? "" : mmTempDept.get("省份名称").toString();
							mm城市 = mmTempDept.get("地区名称") == null ? "" : mmTempDept.get("地区名称").toString();

							mm通讯地址 = mmTempDept.get("通讯地址") == null ? "" : mmTempDept.get("通讯地址").toString();
							mm单位所属详细部门名称 = mmTempDept.get("单位所属详细部门名称") == null ? "" : mmTempDept.get("单位所属详细部门名称").toString();
							mm博士后工作所在部门 = mmTempDept.get("博士后工作所在部门") == null ? "" : mmTempDept.get("博士后工作所在部门").toString();
							mm管理人员姓名 = mmTempDept.get("管理人员姓名") == null ? "" : mmTempDept.get("管理人员姓名").toString();
							mm邮编 = mmTempDept.get("邮编") == null ? "" : mmTempDept.get("邮编").toString();

							mm电子邮件 = mmTempDept.get("电子邮件") == null ? "" : mmTempDept.get("电子邮件").toString();
							mm手机号码 = mmTempDept.get("手机号码") == null ? "" : mmTempDept.get("手机号码").toString();
							mm电话 = mmTempDept.get("完整电话") == null ? "" : mmTempDept.get("完整电话").toString();
							mm传真 = mmTempDept.get("完整传真") == null ? "" : mmTempDept.get("完整传真").toString();
							mm收款单位名称 = mmTempDept.get("收款单位名称") == null ? "" : mmTempDept.get("收款单位名称").toString();

							mm开户行行别 = mmTempDept.get("开户行行别名称") == null ? "" : mmTempDept.get("开户行行别名称").toString();
							mm开户行名称 = mmTempDept.get("开户行名称") == null ? "" : mmTempDept.get("开户行名称").toString();
							mm银行账号 = mmTempDept.get("银行账号") == null ? "" : mmTempDept.get("银行账号").toString();
							mm大额行号 = mmTempDept.get("大额行号") == null ? "" : mmTempDept.get("大额行号").toString();
						}



					}


				}

				// 存值
				tempList.add(mmXuhao);
				tempList.add(mmExcelDeptName);
				tempList.add(mmZhuangtai);
				tempList.add(mm单位英文名称);
				tempList.add(mm省份);
				tempList.add(mm城市);

				tempList.add(mm通讯地址);
				tempList.add(mm单位所属详细部门名称);
				tempList.add(mm博士后工作所在部门);
				tempList.add(mm管理人员姓名);
				tempList.add(mm邮编);

				tempList.add(mm电子邮件);
				tempList.add(mm手机号码);
				tempList.add(mm电话);
				tempList.add(mm传真);
				tempList.add(mm收款单位名称);

				tempList.add(mm开户行行别);
				tempList.add(mm开户行名称);
				tempList.add(mm银行账号);
				tempList.add(mm大额行号);

				mmResultList.add(tempList);		
			}

			// 获得当前日期
			Date mmDate = new Date();
			DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
			String mmDateString = f.format(mmDate);

			String userfilelujin = userfilepath;

			// 取出文档存放的根目录，并去除文件最后的斜杠
			if (userfilelujin.endsWith("/")) {
				userfilelujin = userfilelujin.substring(0, userfilelujin.length() - 1);
			}

			// 生成路径
			userfilelujin += "/temp/danweixinxi/" + mmDateString + "/danweitongxunxinxi/";
			CreateXLS.createExcel(mmResultList, userfilelujin, "danweitongxunxinxi.xls", "danweitongxunxinxi",
					request, response);

		}catch (Exception e) {
			e.printStackTrace();
		}
	}






}
